// pages/car/verify.js
const app = getApp()
const api = require('../../utils/api')
const util = require('../../utils/util')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    carId: '',
    detail: null,
    carList: [],
    carIndex: 0,
    date: '',
    time: '08:00',
    returnDate: '',
    returnTime: '18:00',
    reason: '',
    passengers: '',
    destination: '',
    loading: false,
    submitLoading: false,
    mode: 'apply', // apply: 申请模式, detail: 详情模式
    recordList: [],
    currentTab: 0,
    tabs: ['申请用车', '我的申请'],
    minDate: new Date().getTime(),
    maxDate: new Date().getTime() + 30 * 24 * 60 * 60 * 1000
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查是否传入了carId，如果有则是查看详情，否则是申请
    if (options.id) {
      this.setData({
        carId: options.id,
        mode: 'detail'
      })
      this.loadCarDetail(options.id)
    } else {
      // 设置默认日期
      const today = new Date()
      const dateStr = util.formatDate(today, 'YYYY-MM-DD')
      const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000)
      const tomorrowStr = util.formatDate(tomorrow, 'YYYY-MM-DD')
      
      this.setData({
        date: dateStr,
        returnDate: dateStr
      })
      
      // 加载车辆列表
      this.loadCarList()
    }
    
    // 加载申请记录
    this.loadRecords()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (this.data.currentTab === 1) {
      this.loadRecords()
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 加载车辆列表
  loadCarList: function () {
    this.setData({ loading: true })
    
    api.car.getCarList({
      status: '0'  // 0表示可用车辆
    }).then(res => {
      const carList = res.data || []
      this.setData({
        carList,
        loading: false
      })
    }).catch(() => {
      this.setData({ loading: false })
      util.showToast('加载车辆列表失败')
    })
  },
  
  // 加载车辆详情
  loadCarDetail: function (id) {
    this.setData({ loading: true })
    
    api.car.getCarDetail(id).then(res => {
      this.setData({
        detail: res.data,
        loading: false
      })
    }).catch(() => {
      this.setData({ loading: false })
      util.showToast('加载详情失败')
    })
  },
  
  // 加载用车记录
  loadRecords: function () {
    api.car.getUseRecords().then(res => {
      this.setData({
        recordList: res.data.list || []
      })
    })
  },

  // 选择车辆
  bindCarChange: function (e) {
    this.setData({
      carIndex: e.detail.value
    })
  },
  
  // 选择日期
  bindDateChange: function (e) {
    this.setData({
      date: e.detail.value
    })
  },
  
  // 选择时间
  bindTimeChange: function (e) {
    this.setData({
      time: e.detail.value
    })
  },
  
  // 选择归还日期
  bindReturnDateChange: function (e) {
    this.setData({
      returnDate: e.detail.value
    })
  },
  
  // 选择归还时间
  bindReturnTimeChange: function (e) {
    this.setData({
      returnTime: e.detail.value
    })
  },
  
  // 输入原因
  inputReason: function (e) {
    this.setData({
      reason: e.detail.value
    })
  },
  
  // 输入乘车人
  inputPassengers: function (e) {
    this.setData({
      passengers: e.detail.value
    })
  },
  
  // 输入目的地
  inputDestination: function (e) {
    this.setData({
      destination: e.detail.value
    })
  },
  
  // 切换标签页
  switchTab: function (e) {
    const tabIndex = e.currentTarget.dataset.index
    this.setData({
      currentTab: tabIndex
    })
    
    if (tabIndex === 1) {
      this.loadRecords()
    }
  },
  
  // 提交申请
  submitApply: function () {
    const { carList, carIndex, date, time, returnDate, returnTime, reason, passengers, destination } = this.data
    
    if (carList.length === 0) {
      util.showToast('没有可用车辆')
      return
    }
    
    if (!reason) {
      util.showToast('请输入用车事由')
      return
    }
    
    if (!destination) {
      util.showToast('请输入目的地')
      return
    }
    
    // 检查日期是否合理
    const startTime = new Date(`${date} ${time}`).getTime()
    const endTime = new Date(`${returnDate} ${returnTime}`).getTime()
    
    if (endTime <= startTime) {
      util.showToast('归还时间必须晚于用车时间')
      return
    }
    
    const car = carList[carIndex]
    
    this.setData({ submitLoading: true })
    
    api.car.applyUseCar({
      carId: car.id,
      useDate: date,
      useTime: time,
      returnDate: returnDate,
      returnTime: returnTime,
      reason: reason,
      passengers: passengers,
      destination: destination
    }).then(res => {
      this.setData({ submitLoading: false })
      util.showToast('申请提交成功', 'success')
      
      // 切换到我的申请页面
      this.setData({ currentTab: 1 })
      this.loadRecords()
    }).catch(err => {
      this.setData({ submitLoading: false })
      util.showToast(err.message || '提交失败')
    })
  },
  
  // 查看记录详情
  viewDetail: function (e) {
    const { id } = e.currentTarget.dataset
    wx.navigateTo({
      url: `/pages/car/verify?id=${id}`
    })
  },
  
  // 格式化日期
  formatDate(date) {
    return util.formatDate(date, 'YYYY-MM-DD')
  },
  
  // 格式化时间
  formatDateTime(date) {
    return util.formatDate(date, 'YYYY-MM-DD HH:mm')
  }
})